#include <functional>
#include <iostream>
#include <boost/asio.hpp>
#include <thread>
int main()
{
    boost::asio::io_context io;

    int count = 0;
    boost::asio::steady_timer t(io, boost::asio::chrono::seconds(1));

    // 使用递归lambda
    std::function<void(const boost::system::error_code &)> print;
    print = [&t, &count, &print](const boost::system::error_code & /*e*/)
    {
        if (count < 5)
        {
            std::cout << count << std::endl;
            ++count;
            // 什么意思？
            // 设置下一次触发的时间（当前时间+1秒）
            t.expires_at(t.expiry() + boost::asio::chrono::seconds(1));
            // 递归调用自身
            t.async_wait(print);
            std::cout << "Thread ID: " << std::this_thread::get_id() << std::endl;
        }
    };
    // 打印id
    std::cout << "Main Thread ID: " << std::this_thread::get_id() << std::endl;
    t.async_wait(print);

    // 打印log
    std::cout << "before run" << std::endl;
    io.run();

    std::cout << "Final count is " << count << std::endl;

    return 0;
}